package com.lanswon.qzsmk.dao;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.lanswon.qzsmk.model.CardControl;


public interface CardControlMapper {

    int insert(CardControl record);
    
    /**
     * 批量插入
     * @param cardControls
     * @return
     */
    int batchInsert(@Param("list")List<CardControl> cardControls);

    /**
     * 根据客户编号查询卡控制表
     * @param customerNo 客户编号
     * @return
     */
    List<CardControl> queryCardControlByCustomerNo(String customerNo);
    
    /**
     * 根据申请号查询卡控制表
     * @param applyBatchNo 申请批次号
     * @return
     */
    List<CardControl> queryCardControlByApplyBatchNo(String applyBatchNo);
    
    /**
     * 更新
     * @param c
     * @return
     */
    int updateCardControl(CardControl c);
    
    /**
     * 批量修改
     * @param cardControls
     * @return
     */
    int batchUpdate(@Param("list")List<CardControl> cardControls);
    
    /**
     * 根据任务编号删除
     * @param cardTaskNo 卡任务编号
     */
    int deleteCardControlByCardTaskNO(String cardTaskNo);
    
    /**
     * 根据任务编号查询
     * @param cardTaskNo 卡任务编号
     * @return
     */
    List<CardControl> queryCardControlByCardTaskNo(String cardTaskNo);
    
    /**
     * 根据市民卡号查询
     * @param citizenCardNo 市民卡号
     * @return
     */
    CardControl queryCardControlByCitizenCardNo(String citizenCardNo);
    
    /**
     * 查询数据
     * @param cardDataId 卡数据id
     * @return
     */
    CardControl queryCardControlByCardDataId(Integer cardDataId);
    
    /**
     * 查询信息
     * @param cardStatus 卡状态
     * @return
     */
    List<CardControl> queryOralLossList(String cardStatus);
    
/**
     * 更新控制表信息
     * @param controlIDList 制卡成功对应的卡控制ID
     * @return
     */
    //20181213 hgl 修改以下
    int updateControlSuccess(@Param("cardControlObjList")List<CardControl> cardControlObjList);
    
    /**
     * 配送：更新控制表
     * @param operator
     * @param taskNoList 任务号列表 operatorNo 员工号
     * @return
     */
    //20181213 hgl 修改以下
    int updateControlByDistribute(@Param("cardControlObjList")List<CardControl> cardControlObjList);
    
    /**
     * 配送：查询换卡，退卡的信息，然后配送
     * @param operator
     * @param taskNoList 任务号列表 operatorNo 员工号
     * @return
     */
    List<CardControl> queryRejectCardInfoByBranchNo(@Param("citizenCardNo")String citizenCardNo,@Param("cardCode")String cardCode,
    		       @Param("fromDate")String fromDate,@Param("toDate")String toDate,@Param("branchNo")String branchNo,@Param("idlist")List<String> idlist);
    
    /**
     * 更新卡状态
     * @param cardControlIdList
     * @param empNo
     * @return
     */
	int updateControlByRejectDistribution(@Param("cardControlIdList")List<String> cardControlIdList,@Param("position")String position, @Param("empNo")String empNo);

	/**
	 * 删除
	 * @param cardContrlId
	 */
	void deleteCardControlByCardControlId(Integer cardContrlId);
	
	/**
	 * 查询
	 * @param paperNo 证件号码
	 * @param paperType 证件类型
	 * @param cardPCode 卡产品代码
	 * @return
	 */
	CardControl queryCardControlByPaperNoAndCardPCode(@Param("paperNo")String paperNo,@Param("paperType") String paperType,@Param("cardPCode")String cardPCode);
	
	/**
     * 更新卡状态
     * @param cardControlIdList
     * @param empNo
     * @return
     */
    int updateControlByDistribution(@Param("cardControlObjList")List<CardControl> cardControlObjList);
    
	/**
	 * 接收入库的时候，更新卡控制表
	 * @param taskNo 任务号
	 */
	int updateCardControlByReceive(@Param("cardControlObjList")List<CardControl> cardControlObjList);
	
	/**
	 * 更新卡控制表（入库撤销）
	 * @param taskNoList
	 * @param curEmpNo 
	 */
	void updateByIncomingCancel(@Param("taskNoList")List<String> taskNoList, @Param("curEmpNo")String curEmpNo,
			@Param("cardPosition")String cardPosition,@Param("claimStatus")String claimStatus);
	
	/**
     * 更新卡状态(卡片上缴)
     * @param cardControlIdList
     * @param empNo position claimStatus lastDate cardDate
     * @return
     */
 
	int updateCardControlByDistributeToCenter(@Param("cardControlObjList")List<CardControl> cardControlObjList);
	
	/**
	 * 根据市民卡号列表，查询出控制号列表集合
	 * @param citizenNoList
	 * @return
	 */
	List<String> queryCardControlIDByCitizenNoList(@Param("citizenNoList")List<String> citizenNoList);
	
	/**
	 * 根据市民卡号列表，查询出控制列表集合
	 * @param citizenNoList
	 * @return
	 */
	List<CardControl> queryCardControlByCitizenNoList(@Param("citizenNoList")List<String> citizenNoList);
	
	/**
	 * 废卡配送出库，根据卡控制号，更新卡控制表
	 * @param cardControlIdList
	 */
	void updateControlByRejectDistribute(@Param("cardControlIdList")List<String> cardControlIdList,@Param("operatorNo")String operatorNo);
	
	/**
	 * 
	 * @param citizenCardNoList
	 * @param curEmpNo
	 * @param cardPosition
	 * @param claimStatus
	 */
	void updateIncomingCancelBycitizenNo(@Param("cardControlObjList")List<CardControl> cardControlObjList);
	
	/**
	 * 通过控制号，查询位置
	 * @param cardControlIdList
	 * @return
	 */
	List<String> queryCardPositionByControlId(@Param("cardControlIdList")List<String> cardControlIdList);
	
	/**
	 * 通过网点号，卡产品代码，数量查询在库卡片的ID
	 * @return
	 */
	List<CardControl> queryCardControlIDByEmp(@Param("cardPCode")String cardPCode,@Param("cardPhysicType")String cardPhysicType,
			@Param("amount")Integer amount,@Param("branchNo")String branchNo);
	
	/**
	 * 将领用的卡片，修改位置
	 * @param cardControlIDList
	 * @param empNoByReceiveBlank
	 * @param operatorNo
	 */
	void updateByReceivedEmp(@Param("cardControlObjList")List<CardControl> cardControlObjList);
	
	/**
	 * 通过任务号列表，查找ID
	 * @param taskNoList
	 * @return
	 */
	List<String> queryCardControlIDListByTaskNoList(@Param("taskNoList")List<String> taskNoList);
	
	/**
	 * 柜员归还卡片时，更新卡控制代码
	 * @param cardControlIDList
	 * @param opeNo
	 */
	void updateByControlIDAtReturnCard(@Param("cardControlObjList")List<CardControl> cardControlObjList);

	
}